તમારી પાયથોન એપ્લિકેશન્સમાં સર્ચની શક્તિને અનલૉક કરો. ઑફિશિયલ પાયથોન ક્લાયન્ટનો ઉપયોગ કરીને ઇલાસ્ટિકસર્ચને ઇન્સ્ટોલ, કનેક્ટ, ઇન્ડેક્સ અને ક્વેરી કરવાનું શીખો. વિકાસકર્તાઓ માટે એક પગલું-દર-પગલું માર્ગદર્શિકા.
સર્ચમાં નિપુણતા: પાયથોનને ઇલાસ્ટિકસર્ચ સાથે સંકલિત કરવા માટેની એક વિસ્તૃત માર્ગદર્શિકા
આજના ડેટા-આધારિત વિશ્વમાં, લગભગ રીઅલ-ટાઇમમાં વિશાળ માત્રામાં માહિતીને શોધવાની, વિશ્લેષણ કરવાની અને વિઝ્યુઅલાઈઝ કરવાની ક્ષમતા હવે વૈભવ નથી—તે એક આવશ્યકતા છે. લાખો ઉત્પાદનો ધરાવતી ઈ-કોમર્સ સાઇટ્સથી લઈને દરરોજ ટેરાબાઇટ્સ ડેટા પર પ્રક્રિયા કરતી લોગ એનાલિસિસ સિસ્ટમ્સ સુધી, એક શક્તિશાળી સર્ચ એન્જિન આધુનિક એપ્લિકેશન્સની કરોડરજ્જુ છે. અહીં ઇલાસ્ટિકસર્ચ (Elasticsearch) ચમકે છે, અને જ્યારે વિશ્વની સૌથી લોકપ્રિય પ્રોગ્રામિંગ ભાષાઓમાંની એક, પાયથોન (Python) સાથે જોડવામાં આવે છે, ત્યારે તે વૈશ્વિક વિકાસકર્તાઓ માટે એક પ્રચંડ સંયોજન બનાવે છે.
આ વિસ્તૃત માર્ગદર્શિકા વિકાસકર્તાઓ, ડેટા એન્જિનિયરો અને આર્કિટેક્ટ્સના આંતરરાષ્ટ્રીય પ્રેક્ષકો માટે ડિઝાઇન કરવામાં આવી છે. અમે તમને અધિકૃત ક્લાયન્ટ, elasticsearch-py નો ઉપયોગ કરીને ઇલાસ્ટિકસર્ચને તમારી પાયથોન એપ્લિકેશન્સમાં સંકલિત કરવાના દરેક પગલા દ્વારા માર્ગદર્શન આપીશું. અમે તમારા વાતાવરણને સેટ કરવાથી લઈને જટિલ ક્વેરીઝ કરવા સુધી બધું જ આવરી લઈશું, જ્યારે કોઈપણ વ્યાવસાયિક સેટિંગમાં લાગુ પડતી શ્રેષ્ઠ પદ્ધતિઓ પર ધ્યાન કેન્દ્રિત કરીશું.
શા માટે ઇલાસ્ટિકસર્ચ અને પાયથોન? સંપૂર્ણ ભાગીદારી
આપણે તકનીકી વિગતોમાં ઊંડા ઉતરીએ તે પહેલાં, ચાલો સમજીએ કે આ સંયોજન શા માટે આટલું શક્તિશાળી છે.
ઇલાસ્ટિકસર્ચ માત્ર એક સર્ચ એન્જિન કરતાં ઘણું વધારે છે. તે અપાચે લ્યુસીન (Apache Lucene) પર બનેલું એક વિતરિત, RESTful સર્ચ અને એનાલિટિક્સ એન્જિન છે. તેની મુખ્ય શક્તિઓમાં શામેલ છે:
- ઝડપ: તે ઝડપ માટે રચાયેલ છે, જે મોટા ડેટાસેટ્સમાંથી મિલિસેકન્ડ્સમાં શોધ પરિણામો પાછા આપવા સક્ષમ છે.
- સ્કેલેબિલિટી: તે આડા સ્કેલેબલ છે. તમે એક જ નોડથી શરૂઆત કરી શકો છો અને તમારા ડેટા અને ક્વેરી વોલ્યુમ વધે તેમ સેંકડો સુધી સ્કેલ કરી શકો છો.
- ફુલ-ટેક્સ્ટ સર્ચ: તે અત્યાધુનિક ફુલ-ટેક્સ્ટ સર્ચમાં ઉત્કૃષ્ટ છે, જે ભૂલો, સમાનાર્થી શબ્દો, ભાષા-વિશિષ્ટ વિશ્લેષણ અને રિલેવન્સ સ્કોરિંગને તરત જ હેન્ડલ કરે છે.
- એનાલિટિક્સ: તે શક્તિશાળી એગ્રિગેશન ક્ષમતાઓ પ્રદાન કરે છે, જે તમને વલણો અને આંતરદૃષ્ટિને ઉજાગર કરવા માટે તમારા ડેટાને વિભાજીત અને વિશ્લેષિત કરવાની મંજૂરી આપે છે.
- લવચીકતા: દસ્તાવેજ-લક્ષી અને સ્કીમા-લવચીક હોવાને કારણે, તે જટિલ, અસંરચિત JSON દસ્તાવેજોને સંગ્રહિત અને ઇન્ડેક્સ કરી શકે છે.
બીજી તરફ, પાયથોન તેની સરળતા, વાંચનક્ષમતા અને લાઇબ્રેરીઓના વિશાળ ઇકોસિસ્ટમ માટે જાણીતું છે. આ ભાગીદારીમાં તેની ભૂમિકા બહુમુખી ઓર્કેસ્ટ્રેટર (સંચાલક) બનવાની છે:
- ઝડપી વિકાસ: પાયથોનની સ્વચ્છ સિન્ટેક્સ વિકાસકર્તાઓને ઝડપથી એપ્લિકેશન્સ બનાવવાની અને પ્રોટોટાઇપ કરવાની મંજૂરી આપે છે.
- ડેટા સાયન્સ અને AI હબ: તે ડેટા સાયન્સ, મશીન લર્નિંગ અને AI માટે ડિ ફેક્ટો ભાષા છે, જે એપ્લિકેશન્સ માટે કુદરતી પસંદગી બનાવે છે જેને પ્રક્રિયા કરેલા ડેટાને ઇલાસ્ટિકસર્ચ જેવા એનાલિટિકલ એન્જિનમાં ફીડ કરવાની જરૂર હોય છે.
- મજબૂત વેબ ફ્રેમવર્ક્સ: Django, Flask અને FastAPI જેવા ફ્રેમવર્ક્સ વેબ સેવાઓ અને API બનાવવા માટે સંપૂર્ણ પાયો પૂરો પાડે છે જે બેકેન્ડ પર ઇલાસ્ટિકસર્ચ સાથે સંપર્ક કરે છે.
- મજબૂત સમુદાય અને અધિકૃત ક્લાયન્ટ: સુવ્યવસ્થિત અધિકૃત ક્લાયન્ટ,
elasticsearch-py, ની હાજરી સંકલનને સીમલેસ અને વિશ્વસનીય બનાવે છે.
સાથે મળીને, તેઓ વિકાસકર્તાઓને લોગ મોનિટરિંગ ડેશબોર્ડ્સ, ઈ-કોમર્સ પ્રોડક્ટ કેટલોગ્સ, કન્ટેન્ટ ડિસ્કવરી પ્લેટફોર્મ્સ અને બિઝનેસ ઇન્ટેલિજન્સ ટૂલ્સ જેવી અદ્યતન સર્ચ ક્ષમતાઓ સાથે અત્યાધુનિક એપ્લિકેશન્સ બનાવવા માટે સશક્ત બનાવે છે.
તમારું વૈશ્વિક વિકાસ વાતાવરણ સેટ કરવું
શરૂ કરવા માટે, આપણને બે ઘટકોની જરૂર છે: એક ચાલતું ઇલાસ્ટિકસર્ચ ઇન્સ્ટન્સ અને પાયથોન ક્લાયન્ટ લાઇબ્રેરી. અમે પ્લેટફોર્મ-અજ્ઞેયવાદી પદ્ધતિઓ પર ધ્યાન કેન્દ્રિત કરીશું, ખાતરી કરીશું કે તે વિશ્વમાં ક્યાંય પણ વિકાસકર્તાઓ માટે કામ કરે છે.
1. ડોકર સાથે ઇલાસ્ટિકસર્ચ ચલાવવું
જ્યારે તમે વિવિધ ઓપરેટિંગ સિસ્ટમ્સ પર સીધા જ ઇલાસ્ટિકસર્ચ ઇન્સ્ટોલ કરી શકો છો, ત્યારે ડોકરનો ઉપયોગ કરવો એ સૌથી સીધો અને પુનરાવર્તન કરી શકાય તેવી પદ્ધતિ છે, જે OS-વિશિષ્ટ જટિલતાઓને દૂર કરે છે.
પ્રથમ, ખાતરી કરો કે તમારી મશીન પર ડોકર ઇન્સ્ટોલ કરેલું છે. પછી, તમે એક જ કમાન્ડ વડે વિકાસ માટે સિંગલ-નોડ ઇલાસ્ટિકસર્ચ ક્લસ્ટર ચલાવી શકો છો:
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:8.10.4
ચાલો આ આદેશને સમજીએ:
-p 9200:9200: આ તમારા સ્થાનિક મશીન પર પોર્ટ 9200 ને ડોકર કન્ટેનરની અંદર પોર્ટ 9200 પર મેપ કરે છે. આ REST API માટેનો પોર્ટ છે.-e "discovery.type=single-node": આ ઇલાસ્ટિકસર્ચને સિંગલ-નોડ મોડમાં શરૂ કરવા કહે છે, જે સ્થાનિક વિકાસ માટે યોગ્ય છે.docker.elastic.co/elasticsearch/elasticsearch:8.10.4: આ અધિકૃત ઇલાસ્ટિકસર્ચ ઇમેજ અને ચોક્કસ વર્ઝનનો ઉલ્લેખ કરે છે. અનપેક્ષિત ફેરફારો ટાળવા માટે વર્ઝનને પિન કરવું હંમેશા સારી પ્રથા છે.
જ્યારે તમે આને પ્રથમ વખત ચલાવો છો, ત્યારે ડોકર ઇમેજ ડાઉનલોડ કરશે. સ્ટાર્ટઅપ પર, ઇલાસ્ટિકસર્ચ બિલ્ટ-ઇન elastic યુઝર માટે પાસવર્ડ અને એનરોલમેન્ટ ટોકન જનરેટ કરશે. જનરેટ થયેલ પાસવર્ડની નકલ કરવાનું અને તેને સુરક્ષિત જગ્યાએ સાચવવાનું સુનિશ્ચિત કરો. તમને તમારા પાયથોન ક્લાયન્ટથી કનેક્ટ થવા માટે તેની જરૂર પડશે.
ઇલાસ્ટિકસર્ચ ચાલી રહ્યું છે તેની ચકાસણી કરવા માટે, તમારું વેબ બ્રાઉઝર ખોલો અથવા curl જેવા ટૂલનો ઉપયોગ કરીને http://localhost:9200 ને ઍક્સેસ કરો. સુરક્ષા મૂળભૂત રીતે સક્ષમ હોવાથી, તે યુઝરનેમ (elastic) અને તમે હમણાં જ સાચવેલા પાસવર્ડ માટે પૂછશે. તમને તમારા ક્લસ્ટર વિશેની માહિતી સાથેનો JSON પ્રતિસાદ દેખાશે.
2. પાયથોન ઇલાસ્ટિકસર્ચ ક્લાયન્ટ ઇન્સ્ટોલ કરવું
પ્રોજેક્ટ ડિપેન્ડન્સીઝનું સંચાલન કરવા માટે વર્ચ્યુઅલ એન્વાયર્નમેન્ટનો ઉપયોગ કરવો એ પાયથોન સમુદાયમાં એક મજબૂત શ્રેષ્ઠ પ્રથા છે. આ પ્રોજેક્ટ્સ વચ્ચેના સંઘર્ષોને ટાળે છે.
પ્રથમ, વર્ચ્યુઅલ એન્વાયર્નમેન્ટ બનાવો અને સક્રિય કરો:
# Create a virtual environment
python -m venv venv
# Activate it (syntax differs by OS)
# On macOS/Linux:
source venv/bin/activate
# On Windows:
.\venv\Scripts\activate
હવે, તમારા વર્ચ્યુઅલ એન્વાયર્નમેન્ટ સક્રિય સાથે, pip નો ઉપયોગ કરીને અધિકૃત ક્લાયન્ટ લાઇબ્રેરી ઇન્સ્ટોલ કરો:
pip install elasticsearch
આ આદેશ elasticsearch-py લાઇબ્રેરી ઇન્સ્ટોલ કરે છે, જેનો ઉપયોગ આપણે આપણા ઇલાસ્ટિકસર્ચ ક્લસ્ટર સાથેની તમામ ક્રિયાપ્રતિક્રિયાઓ માટે કરીશું.
ઇલાસ્ટિકસર્ચ સાથે સુરક્ષિત કનેક્શન સ્થાપિત કરવું
સેટઅપ પૂર્ણ થયા પછી, ચાલો ક્લસ્ટર સાથે કનેક્ટ થવા માટે આપણી પ્રથમ પાયથોન સ્ક્રિપ્ટ લખીએ. તમારા વાતાવરણ (સ્થાનિક વિકાસ, ક્લાઉડ ડિપ્લોયમેન્ટ વગેરે) ના આધારે ક્લાયન્ટને ઘણી રીતે ગોઠવી શકાય છે.
સ્થાનિક, સુરક્ષિત ઇન્સ્ટન્સ સાથે કનેક્ટ કરવું
ઇલાસ્ટિકસર્ચના આધુનિક સંસ્કરણોમાં મૂળભૂત રીતે સુરક્ષા સક્ષમ હોવાથી, તમારે ઓળખપત્રો પ્રદાન કરવાની જરૂર છે. તમે સ્થાનિક વિકાસ માટે સ્વ-હસ્તાક્ષરિત પ્રમાણપત્રનો પણ ઉપયોગ કરી રહ્યા હશો, જેના માટે થોડી વધારાની ગોઠવણીની જરૂર છે.
connect.py નામની ફાઇલ બનાવો:
from elasticsearch import Elasticsearch
# You might need to adjust the host and port if you are not running on localhost
# Replace 'your_password' with the password generated by Elasticsearch on startup
ES_PASSWORD = "your_password"
# Create the client instance
client = Elasticsearch(
"http://localhost:9200",
basic_auth=("elastic", ES_PASSWORD)
)
# Successful response!
print("Successfully connected to Elasticsearch!")
# You can also get cluster information
cluster_info = client.info()
print(f"Cluster Name: {cluster_info['cluster_name']}")
print(f"Elasticsearch Version: {cluster_info['version']['number']}")
સુરક્ષા પર મહત્વપૂર્ણ નોંધ: ઉત્પાદન વાતાવરણમાં, તમારા સ્રોત કોડમાં પાસવર્ડ્સને ક્યારેય હાર્ડકોડ કરશો નહીં. પર્યાવરણ ચલો, સિક્રેટ્સ મેનેજમેન્ટ સિસ્ટમ (જેમ કે HashiCorp Vault અથવા AWS Secrets Manager), અથવા અન્ય સુરક્ષિત ગોઠવણી પદ્ધતિઓનો ઉપયોગ કરો.
ક્લાઉડ સેવા સાથે કનેક્ટ કરવું (દા.ત., ઇલાસ્ટિક ક્લાઉડ)
ઉત્પાદન અને સ્ટેજિંગ વાતાવરણ માટે, તમે ઇલાસ્ટિક ક્લાઉડ (Elastic Cloud) જેવી વ્યવસ્થાપિત સેવાનો ઉપયોગ કરી રહ્યા હશો. તેની સાથે કનેક્ટ કરવું વધુ સરળ છે, કારણ કે તે તમારા માટે સુરક્ષા અને નેટવર્કિંગની જટિલતાઓને સંભાળે છે. તમે સામાન્ય રીતે ક્લાઉડ ID અને API કીનો ઉપયોગ કરીને કનેક્ટ કરો છો.
from elasticsearch import Elasticsearch
# Found in the Elastic Cloud console
CLOUD_ID = "Your_Cloud_ID"
API_KEY = "Your_Encoded_API_Key"
# Create the client instance
client = Elasticsearch(
cloud_id=CLOUD_ID,
api_key=API_KEY
)
# Verify the connection
if client.ping():
print("Successfully connected to Elastic Cloud!")
else:
print("Could not connect to Elastic Cloud.")
આ પદ્ધતિ અત્યંત ભલામણપાત્ર છે કારણ કે તે સુરક્ષિત છે અને અંતર્ગત હોસ્ટ URL ને અમૂર્ત કરે છે.
મુખ્ય ખ્યાલો: ઇન્ડેક્સ, દસ્તાવેજો અને ઇન્ડેક્સિંગ
આપણે ડેટા શોધતા પહેલા, આપણે ઇલાસ્ટિકસર્ચમાં થોડો ડેટા મૂકવાની જરૂર છે. ચાલો કેટલીક મુખ્ય પરિભાષા સ્પષ્ટ કરીએ.
- દસ્તાવેજ (Document): માહિતીનું મૂળભૂત એકમ જેને ઇન્ડેક્સ કરી શકાય છે. તે એક JSON ઑબ્જેક્ટ છે. તેને ડેટાબેઝ કોષ્ટકમાં એક પંક્તિ તરીકે વિચારો.
- ઇન્ડેક્સ (Index): દસ્તાવેજોનો સંગ્રહ જેમાં કંઈક અંશે સમાન લાક્ષણિકતાઓ હોય છે. તેને રિલેશનલ ડેટાબેઝમાં એક કોષ્ટક તરીકે વિચારો.
- ઇન્ડેક્સિંગ (Indexing): ઇન્ડેક્સમાં દસ્તાવેજ ઉમેરવાની પ્રક્રિયા. એકવાર ઇન્ડેક્સ થયા પછી, દસ્તાવેજ શોધી શકાય છે.
એક જ દસ્તાવેજનું ઇન્ડેક્સિંગ
index પદ્ધતિનો ઉપયોગ ચોક્કસ ઇન્ડેક્સમાં દસ્તાવેજ ઉમેરવા અથવા અપડેટ કરવા માટે થાય છે. જો ઇન્ડેક્સ અસ્તિત્વમાં નથી, તો ઇલાસ્ટિકસર્ચ તેને મૂળભૂત રીતે આપમેળે બનાવશે.
ચાલો એક પુસ્તક વિશેના દસ્તાવેજને ઇન્ડેક્સ કરવા માટે indexing_single.py નામની સ્ક્રિપ્ટ બનાવીએ.
from elasticsearch import Elasticsearch
ES_PASSWORD = "your_password"
client = Elasticsearch(
"http://localhost:9200",
basic_auth=("elastic", ES_PASSWORD)
)
# Define the index name
index_name = "books"
# The document to be indexed
document = {
"title": "The Hitchhiker's Guide to the Galaxy",
"author": "Douglas Adams",
"publication_year": 1979,
"genre": "Science Fiction",
"summary": "A comedic science fiction series following the adventures of the last surviving man, Arthur Dent."
}
# Index the document
# We can provide a specific ID, or let Elasticsearch generate one
response = client.index(index=index_name, id=1, document=document)
print(f"Indexed document with ID 1. Result: {response['result']}")
જ્યારે તમે આ સ્ક્રિપ્ટ ચલાવો છો, ત્યારે તે `books` નામનો ઇન્ડેક્સ બનાવશે (જો તે પહેલેથી અસ્તિત્વમાં ન હોય તો) અને `1` ના ID સાથે દસ્તાવેજ ઉમેરશે. જો તમે તેને ફરીથી ચલાવો છો, તો તે સમાન સામગ્રી સાથે હાલના દસ્તાવેજ `1` ને અપડેટ કરશે, તેના સંસ્કરણ નંબરને વધારશે.
ઉચ્ચ પ્રદર્શન માટે બલ્ક ઇન્ડેક્સિંગ
દરેક વિનંતીના નેટવર્ક ઓવરહેડને કારણે દસ્તાવેજોને એક પછી એક ઇન્ડેક્સ કરવું અયોગ્ય છે. કોઈપણ વાસ્તવિક-વિશ્વ એપ્લિકેશન માટે, તમારે બલ્ક API નો ઉપયોગ કરવો જોઈએ. પાયથોન ક્લાયન્ટ આ માટે એક અનુકૂળ સહાયક કાર્ય પ્રદાન કરે છે.
ચાલો દસ્તાવેજોની સૂચિને ઇન્ડેક્સ કરવા માટે indexing_bulk.py નામની સ્ક્રિપ્ટ બનાવીએ.
from elasticsearch import Elasticsearch
from elasticsearch.helpers import bulk
ES_PASSWORD = "your_password"
client = Elasticsearch(
"http://localhost:9200",
basic_auth=("elastic", ES_PASSWORD)
)
index_name = "books"
# A list of documents
documents = [
{
"_id": 2,
"title": "1984",
"author": "George Orwell",
"publication_year": 1949,
"genre": "Dystopian",
"summary": "A novel about the dangers of totalitarianism."
},
{
"_id": 3,
"title": "Pride and Prejudice",
"author": "Jane Austen",
"publication_year": 1813,
"genre": "Romance",
"summary": "A classic romance novel focusing on character development and social commentary."
},
{
"_id": 4,
"title": "To Kill a Mockingbird",
"author": "Harper Lee",
"publication_year": 1960,
"genre": "Classic",
"summary": "A novel about innocence, injustice, and racism in the American South."
}
]
# Prepare actions for the bulk helper
def generate_actions(docs):
for doc in docs:
yield {
"_index": index_name,
"_id": doc["_id"],
"_source": {
"title": doc["title"],
"author": doc["author"],
"publication_year": doc["publication_year"],
"genre": doc["genre"],
"summary": doc["summary"],
}
}
# Perform the bulk indexing
success, failed = bulk(client, generate_actions(documents))
print(f"Successfully indexed {success} documents.")
if failed:
print(f"Failed to index {len(failed)} documents.")
આ અભિગમ નોંધપાત્ર રીતે ઝડપી છે કારણ કે તે એક જ API કૉલમાં ઇલાસ્ટિકસર્ચમાં બહુવિધ દસ્તાવેજો મોકલે છે, જે મોટા ડેટાસેટ્સને ઇન્ડેક્સ કરવા માટે તેને અનિવાર્ય બનાવે છે.
શક્તિશાળી સર્ચ બનાવવું: ક્વેરી DSL
હવે જ્યારે આપણી પાસે આપણા ઇન્ડેક્સમાં ડેટા છે, ત્યારે આપણે શોધવાનું શરૂ કરી શકીએ છીએ. ઇલાસ્ટિકસર્ચ એક સમૃદ્ધ, JSON-આધારિત ક્વેરી ડોમેન-સ્પેસિફિક લેંગ્વેજ (DSL) પ્રદાન કરે છે જે તમને સરળ ટેક્સ્ટ સર્ચથી લઈને જટિલ, બહુ-સ્તરીય ક્વેરીઝ સુધી બધું બનાવવાની મંજૂરી આપે છે.
તમામ શોધ કામગીરી ક્લાયન્ટ પર search પદ્ધતિનો ઉપયોગ કરીને કરવામાં આવે છે.
મૂળભૂત શોધ: બધા દસ્તાવેજો પુનઃપ્રાપ્ત કરવા
સૌથી સરળ ક્વેરી `match_all` છે, જે, નામ સૂચવે છે તેમ, ઇન્ડેક્સમાંના બધા દસ્તાવેજોને મેચ કરે છે.
response = client.search(
index="books",
query={
"match_all": {}
}
)
print(f"Found {response['hits']['total']['value']} books.")
for hit in response['hits']['hits']:
print(f"- {hit['_source']['title']} by {hit['_source']['author']}")
ફુલ-ટેક્સ્ટ સર્ચ: `match` ક્વેરી
આ ફુલ-ટેક્સ્ટ સર્ચનો કાર્યસાધક છે. `match` ક્વેરી શોધ સ્ટ્રિંગ અને ઇન્ડેક્સ કરેલા ટેક્સ્ટનું વિશ્લેષણ કરીને સંબંધિત દસ્તાવેજો શોધે છે. ઉદાહરણ તરીકે, "adventures in galaxy" માટે શોધ કરવાથી આપણી પ્રથમ પુસ્તક, "The Hitchhiker's Guide to the Galaxy" સાથે સંભવતઃ મેચ થશે, કારણ કે ટેક્સ્ટને ટોકનાઇઝ્ડ (શબ્દોમાં વિભાજિત), લોઅરકેસ અને સામાન્ય શબ્દો (જેમ કે "in") ને ઘણીવાર અવગણવામાં આવે છે.
response = client.search(
index="books",
query={
"match": {
"summary": "adventures galaxy"
}
}
)
print("--- Search results for 'adventures galaxy' in summary ---")
for hit in response['hits']['hits']:
print(f"Found: {hit['_source']['title']} (Score: {hit['_score']})")
આઉટપુટમાં `_score` પર ધ્યાન આપો. આ ઇલાસ્ટિકસર્ચ દ્વારા ગણવામાં આવેલ સુસંગતતા સ્કોર છે, જે દર્શાવે છે કે દસ્તાવેજ ક્વેરી સાથે કેટલી સારી રીતે મેચ થાય છે.
સ્ટ્રક્ચર્ડ સર્ચ: `term` ક્વેરી
કેટલીકવાર તમારે વિશ્લેષણ કરેલા ટેક્સ્ટને બદલે ચોક્કસ મૂલ્ય માટે શોધ કરવાની જરૂર પડે છે. ઉદાહરણ તરીકે, ચોક્કસ શૈલી અથવા પ્રકાશન વર્ષ દ્વારા ફિલ્ટર કરવું. અહીં `term` ક્વેરીઝનો ઉપયોગ થાય છે. તેઓ ચોક્કસ શબ્દ શોધે છે અને ઇનપુટનું વિશ્લેષણ કરતા નથી.
આ એક મહત્વપૂર્ણ ભેદ છે: `summary` અથવા `title` જેવા ફુલ-ટેક્સ્ટ ફીલ્ડ્સ માટે match નો ઉપયોગ કરો, અને ટૅગ્સ, ID અથવા સ્ટેટસ કોડ્સ જેવા કીવર્ડ-જેવા ફીલ્ડ્સ માટે term નો ઉપયોગ કરો.
# Find all books in the 'Dystopian' genre
response = client.search(
index="books",
query={
"term": {
"genre.keyword": "Dystopian" # Note the .keyword suffix
}
}
)
print("--- Dystopian Books ---")
for hit in response['hits']['hits']:
print(hit['_source']['title'])
`.keyword` પર એક ઝડપી નોંધ: મૂળભૂત રીતે, ઇલાસ્ટિકસર્ચ ટેક્સ્ટ ફીલ્ડના બે સંસ્કરણો બનાવે છે: એક `analyzed` સંસ્કરણ (ફુલ-ટેક્સ્ટ સર્ચ માટે) અને એક `keyword` સંસ્કરણ જે ટેક્સ્ટને એક જ, ચોક્કસ સ્ટ્રિંગ તરીકે સંગ્રહિત કરે છે. જ્યારે તમે ચોક્કસ સ્ટ્રિંગ મૂલ્ય પર ફિલ્ટર અથવા એગ્રિગેટ કરવા માંગતા હો, ત્યારે તમારે `.keyword` સફિક્સનો ઉપયોગ કરવો જોઈએ.
`bool` ક્વેરી સાથે ક્વેરીઝને જોડવી
વાસ્તવિક-વિશ્વની શોધો ભાગ્યે જ સરળ હોય છે. તમારે ઘણીવાર બહુવિધ માપદંડોને જોડવાની જરૂર પડે છે. આ કરવા માટે `bool` (બુલિયન) ક્વેરી એ એક માર્ગ છે. તેમાં ચાર મુખ્ય કલમ છે:
must: આ વિભાગમાંની બધી કલમો મેળ ખાતી હોવી જોઈએ. તેઓ સુસંગતતા સ્કોરમાં ફાળો આપે છે. (`AND` ની સમકક્ષ).should: આ વિભાગમાંની ઓછામાં ઓછી એક કલમ મેળ ખાતી હોવી જોઈએ. તેઓ સુસંગતતા સ્કોરમાં ફાળો આપે છે. (`OR` ની સમકક્ષ).must_not: આ વિભાગમાંની બધી કલમો મેળ ખાતી ન હોવી જોઈએ. (`NOT` ની સમકક્ષ).filter: આ વિભાગમાંની બધી કલમો મેળ ખાતી હોવી જોઈએ, પરંતુ તે નોન-સ્કોરિંગ, કેશીંગ-ફ્રેન્ડલી સંદર્ભમાં અમલ કરવામાં આવે છે. આ ચોક્કસ-મેળ ફિલ્ટરિંગ (જેમ કે `term` ક્વેરીઝ) માટે આદર્શ છે અને પ્રદર્શનમાં નોંધપાત્ર સુધારો કરે છે.
ચાલો એક પુસ્તક શોધીએ જે 'ક્લાસિક' હોય પરંતુ 1950 પછી પ્રકાશિત થયું હોય.
response = client.search(
index="books",
query={
"bool": {
"must": [
{"match": {"genre": "Classic"}}
],
"filter": [
{
"range": {
"publication_year": {
"gt": 1950 # gt means 'greater than'
}
}
}
]
}
}
)
print("--- Classics published after 1950 ---")
for hit in response['hits']['hits']:
print(f"{hit['_source']['title']} ({hit['_source']['publication_year']})")
અહીં, આપણે સુસંગતતા માટે `must` કલમમાં `match` ક્વેરીનો ઉપયોગ કર્યો અને કાર્યક્ષમ, નોન-સ્કોરિંગ ફિલ્ટરિંગ માટે `filter` કલમની અંદર `range` ક્વેરીનો ઉપયોગ કર્યો.
પૃષ્ઠીકરણ (Pagination) અને સૉર્ટિંગ
મૂળભૂત રીતે, ઇલાસ્ટિકસર્ચ ટોચના 10 પરિણામો પરત કરે છે. પૃષ્ઠીકરણ (pagination) અમલમાં મૂકવા માટે, તમે `from` અને `size` પરિમાણોનો ઉપયોગ કરી શકો છો.
size: પરત કરવા માટેના હિટની સંખ્યા (દા.ત., પૃષ્ઠનું કદ).from: શરૂઆતનો ઑફસેટ (દા.ત., `(page_number - 1) * size`).
તમે એક અથવા વધુ ફીલ્ડ્સ દ્વારા પરિણામોને પણ સૉર્ટ કરી શકો છો.
# Get the first 2 books, sorted by publication year in ascending order
response = client.search(
index="books",
query={"match_all": {}},
size=2,
from_=0,
sort=[
{
"publication_year": {
"order": "asc" # 'asc' for ascending, 'desc' for descending
}
}
]
)
print("--- First 2 books sorted by publication year ---")
for hit in response['hits']['hits']:
print(f"{hit['_source']['title']} ({hit['_source']['publication_year']})")
તમારા ડેટાનું સંચાલન: અપડેટ અને ડિલીટ કામગીરી
તમારો ડેટા સ્થિર નથી. તમારી એપ્લિકેશન વિકસિત થાય તેમ તમારે દસ્તાવેજોને અપડેટ અને ડિલીટ કરવાની જરૂર પડશે.
દસ્તાવેજને અપડેટ કરવું
તમે `update` પદ્ધતિનો ઉપયોગ કરીને દસ્તાવેજને અપડેટ કરી શકો છો. જો તમે ફક્ત થોડા ફીલ્ડ્સ બદલી રહ્યા હોવ તો આ સમગ્ર દસ્તાવેજને ફરીથી ઇન્ડેક્સ કરવા કરતાં વધુ કાર્યક્ષમ છે.
# Let's add a list of tags to our '1984' book (ID 2)
client.update(
index="books",
id=2,
doc={
"tags": ["political fiction", "social science fiction"]
}
)
print("Document 2 updated.")
દસ્તાવેજને ડિલીટ કરવું
દસ્તાવેજને દૂર કરવા માટે, ઇન્ડેક્સ નામ અને દસ્તાવેજ ID સાથે `delete` પદ્ધતિનો ઉપયોગ કરો.
# Let's say we want to delete 'Pride and Prejudice' (ID 3)
response = client.delete(index="books", id=3)
if response['result'] == 'deleted':
print("Document 3 successfully deleted.")
સંપૂર્ણ ઇન્ડેક્સને ડિલીટ કરવું
ચેતવણી: આ કામગીરી ઉલટાવી ન શકાય તેવી છે! ઇન્ડેક્સ ડિલીટ કરતી વખતે ખૂબ કાળજી રાખો, કારણ કે તેનો તમામ ડેટા કાયમ માટે ખોવાઈ જશે.
# To delete the entire 'books' index
# client.indices.delete(index="books")
# print("Index 'books' deleted.")
મજબૂત, વૈશ્વિક એપ્લિકેશન્સ માટે શ્રેષ્ઠ પદ્ધતિઓ
એક સરળ સ્ક્રિપ્ટ બનાવવી એ એક બાબત છે; પ્રોડક્શન-રેડી એપ્લિકેશન બનાવવી એ બીજી બાબત છે. અહીં કેટલીક શ્રેષ્ઠ પદ્ધતિઓ છે જેને ધ્યાનમાં રાખવી જોઈએ.
- સારી રીતે એરર હેન્ડલિંગ: નેટવર્ક કનેક્શન્સ નિષ્ફળ થઈ શકે છે, અને દસ્તાવેજો મળી શકતા નથી. લાઇબ્રેરીમાંથી ચોક્કસ અપવાદો, જેમ કે
elasticsearch.ConnectionErrorઅથવાelasticsearch.NotFoundErrorને હેન્ડલ કરવા માટે તમારી ક્લાયન્ટ કૉલ્સને `try...except` બ્લોક્સમાં લપેટો. - રૂપરેખાંકન વ્યવસ્થાપન: અગાઉ જણાવ્યું તેમ, ઓળખપત્રો અથવા હોસ્ટનામ ક્યારેય હાર્ડકોડ કરશો નહીં. પર્યાવરણ ચલો અથવા સમર્પિત રૂપરેખાંકન ફાઇલમાંથી વાંચતી મજબૂત રૂપરેખાંકન સિસ્ટમનો ઉપયોગ કરો. તમારી એપ્લિકેશનને વિવિધ વાતાવરણ (વિકાસ, સ્ટેજિંગ, ઉત્પાદન) માં જમાવવા માટે આ નિર્ણાયક છે.
- સ્પષ્ટ મેપિંગ્સ: જ્યારે ઇલાસ્ટિકસર્ચ તમારા ફીલ્ડ્સના ડેટા પ્રકારોનો અનુમાન લગાવી શકે છે (ડાયનેમિક મેપિંગ નામની પ્રક્રિયા), ત્યારે ઉત્પાદનમાં સ્પષ્ટ મેપિંગ વ્યાખ્યાયિત કરવું એ શ્રેષ્ઠ પ્રથા છે. મેપિંગ એ તમારા ઇન્ડેક્સ માટે સ્કીમા વ્યાખ્યા જેવું છે. તે તમને દરેક ફીલ્ડને કેવી રીતે ઇન્ડેક્સ કરવું તે ચોક્કસ રીતે નિયંત્રિત કરવાની મંજૂરી આપે છે, જે પ્રદર્શન, સ્ટોરેજ ઑપ્ટિમાઇઝેશન અને બહુ-ભાષા વિશ્લેષણ જેવી અદ્યતન સુવિધાઓ માટે નિર્ણાયક છે.
- ક્લાયન્ટ ઇન્સ્ટન્શિયેશન: તમારી એપ્લિકેશનના જીવનચક્ર માટે `Elasticsearch` ક્લાયન્ટનો એક જ, લાંબા સમય સુધી ચાલતો ઇન્સ્ટન્સ બનાવો. ક્લાયન્ટ તેના પોતાના કનેક્શન પૂલનું સંચાલન કરે છે, અને દરેક વિનંતી માટે નવા ઇન્સ્ટન્સ બનાવવું અત્યંત અકુશળ છે.
- લોગિંગ: વિનંતીઓ, પ્રતિસાદો અને કેન્દ્રીય રીતે સંભવિત સમસ્યાઓનું નિરીક્ષણ કરવા માટે ઇલાસ્ટિકસર્ચ ક્લાયન્ટના લોગિંગને તમારી એપ્લિકેશનના લોગિંગ ફ્રેમવર્ક સાથે એકીકૃત કરો.
નિષ્કર્ષ: તમારી યાત્રા હવે શરૂ થાય છે
આપણે પાયથોન-ઇલાસ્ટિકસર્ચ ભાગીદારીના મૂળભૂત 'શા માટે' થી લઈને તેને અમલમાં મૂકવાના વ્યવહારિક 'કેવી રીતે' સુધીની યાત્રા કરી છે. તમે તમારા વાતાવરણને સેટ કરવાનું, સુરક્ષિત રીતે કનેક્ટ કરવાનું, વ્યક્તિગત રીતે અને બલ્કમાં ડેટાને ઇન્ડેક્સ કરવાનું, અને ક્વેરી DSL નો ઉપયોગ કરીને વિવિધ શક્તિશાળી શોધ ક્વેરીઝ બનાવવાનું શીખ્યા છો. તમે હવે તમારી પાયથોન એપ્લિકેશન્સમાં વિશ્વ-કક્ષાના સર્ચ એન્જિનને સંકલિત કરવા માટેની મુખ્ય કુશળતાઓથી સજ્જ છો.
આ તો માત્ર શરૂઆત છે. ઇલાસ્ટિકસર્ચનું વિશ્વ વિશાળ છે અને શક્તિશાળી સુવિધાઓથી ભરેલું છે જે શોધવાની રાહ જોઈ રહી છે. અમે તમને આમાં વધુ ઊંડા ઉતરવા પ્રોત્સાહિત કરીએ છીએ:
- એગ્રિગેશન્સ: જટિલ ડેટા વિશ્લેષણ કરવા અને ડેશબોર્ડ્સ બનાવવા માટે.
- વધુ અદ્યતન ક્વેરીઝ: જેમ કે `multi_match`, `should` સાથે `bool`, અને સુસંગતતાને સુધારવા માટે ફંક્શન સ્કોર ક્વેરીઝ.
- ભાષા વિશ્લેષકો: ચોક્કસ માનવ ભાષાઓ માટે શોધને ઑપ્ટિમાઇઝ કરવા માટે, વૈશ્વિક એપ્લિકેશન્સ માટે એક નિર્ણાયક સુવિધા.
- સંપૂર્ણ ઇલાસ્ટિક સ્ટેક: વિઝ્યુલાઇઝેશન માટે કિબાના (Kibana) અને ડેટા ઇન્જેશન માટે લોગસ્ટાશ (Logstash)/બીટ્સ (Beats) સહિત.
પાયથોન અને ઇલાસ્ટિકસર્ચની શક્તિનો લાભ લઈને, તમે ઝડપી, સ્માર્ટર અને વધુ સમજદાર એપ્લિકેશન્સ બનાવી શકો છો જે અસાધારણ વપરાશકર્તા અનુભવો પ્રદાન કરે છે. સુખદ શોધ!